package com.mrx.xfriendship.service;

import com.alibaba.fastjson.JSONObject;
import com.mrx.xfriendship.model.dto.PageDTO;
import com.mrx.xfriendship.model.dto.PostDTO;
import com.mrx.xfriendship.model.vo.ListPostPageVO;
import com.mrx.xfriendship.model.vo.PostManagePageVO;
import com.mrx.xfriendship.model.vo.PostVO;
import org.springframework.lang.NonNull;

/**
 * @author : 肖康宁
 * @since : 2023-01-13 14:57
 **/
public interface IPostService {

    /**
     * 分页查询 帖子, 考虑到 接口性质 以及 接口性能, 这个接口里的 PostDTO 不包含 content 和 comment 字段
     *
     * @param ip     用户 ip
     * @param pageVO 分页参数
     * @return 查询结果
     */
    PageDTO<PostDTO> listPosts(String ip, @NonNull ListPostPageVO pageVO);

    PageDTO<PostDTO> listPostsByUserId(@NonNull Integer userId);

    /**
     * 获取帖子详情, 如果找不到帖子将会抛出异常, 本方法包含所有 PostDTO 中的字段
     *
     * @param id 帖子 id
     * @return 帖子详情
     */
    @NonNull
    PostDTO postDetail(Integer id);

    /**
     * 发布帖子
     *
     * @param vo 要发布的帖子
     */
    void publish(PostVO vo);

    void syncPV(@NonNull JSONObject json);

    PageDTO<PostDTO> listPosts(PostManagePageVO vo);

    void updatePost(PostDTO dto);

    void delete(Integer id);

}
